/**
给定一个字符串 s，找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

示例 1：

输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
示例 2：

输入: "cbbd"
输出: "bb"

来源：力扣（LeetCode）
链接：https://leetcode-cn.com/problems/longest-palindromic-substring
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
*/
fn main() {
    let string = Solution::longest_palindrome(String::from("abacaba"));
    println!("{}", string)
}

struct Solution;

impl Solution {
    pub fn longest_palindrome(s: String) -> String {
        if s.len() <= 1 {
            return s;
        }
        let (mut idx, mut l, mut r) = (0 as usize, 0 as usize, 0 as usize);
        let mut max_length = 0 as usize;
        let sbytes = s.as_bytes();
        while idx < s.len() - max_length / 2 {
            let mut left = idx;
            let mut right = idx;
            while left > 0 && sbytes[left - 1] == sbytes[idx] {
                left -= 1;
            }
            while right < s.len() - 1 && sbytes[right + 1] == sbytes[idx] {
                right += 1;
            }
            idx = right + 1;
            while left > 0 && right < s.len() - 1 && sbytes[left - 1] == sbytes[right + 1] {
                left -= 1;
                right += 1;
            }
            if max_length < right - left + 1 {
                max_length = right - left + 1;l = left;r= right;
            }
        }
        String::from(&s[l..=r])
    }
}